home *** CD-ROM | disk | FTP | other *** search
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;; ;;
- ;; ASSEMBLE.MAC ;;
- ;; ;;
- ;; SAMPLE MACRO LIBRARY FOR THE IBM PC MACRO ASSEMBLER ;;
- ;; ;;
- ;; (C) COPYRIGHT 1983 ;;
- ;; BY ;;
- ;; JERRY D. STUCKLE ;;
- ;; ;;
- ;; RELEASED TO PUBLIC DOMAIN ;;
- ;; ;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
-
-
-
- CLEAR MACRO R1,R2,R3,R4,R5,R6,R7,R8
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: CLEAR ;;
- ;; ;;
- ;; DESCRIPTION: CLEAR REGISTERS ;;
- ;; ;;
- ;; PARAMATERS: UP TO 8 REGISTERS TO BE CLEARED ;;
- ;; ;;
- ;; INPUT: N/A ;;
- ;; ;;
- ;; OUTPUT: REQUESTED REGISTERS SET TO BINARY 0'S ;;
- ;; ;;
- ;; REGISTERS USED: NONE ;;
- ;; ;;
- ;;***************************************************************************;;
- IRP RX,<R1,R2,R3,R4,R5,R6,R7,R8> ;REGISTER LIST
- IFNB <RX> ;FOR EACH REGISTER IN LIST
- XOR RX,RX ;CLEAR THE REGISTER
- ENDIF ;END OF IFIDN
- ENDM ;END OF IRP
- ENDM ;MACRO END
- CLS MACRO
- LOCAL CLS1,CLSD
-
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: CLS ;;
- ;; ;;
- ;; DESCRIPTION: CLEAR THE DISPLAY SCREEN ;;
- ;; ;;
- ;; PARAMATERS: NONE ;;
- ;; ;;
- ;; INPUT: NONE ;;
- ;; ;;
- ;; OUTPUT: NONE ;;
- ;; ;;
- ;; REGISTERS USED: AX,DX ;;
- ;; ;;
- ;;***************************************************************************;;
- DISPLAY CLSD ;DISPLAY THE DOS2 STRING
- JMP SHORT CLS1 ;GO AROUND THE STRING DATA
- CLSD DB 1BH,'[2J$' ;DATA FOR DOS CALL
- CLS1 LABEL NEAR
- ENDM
- COLOR MACRO FOREGROUND,BACKGROUND
- LOCAL COLD,COL1
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: COLOR ;;
- ;; ;;
- ;; DESCRIPTION: SETS DISPLAY COLOR ;;
- ;; ;;
- ;; PARAMATERS: FOREGROUND COLOR, BACKGROUND COLOR ;;
- ;; ;;
- ;; INPUT: NONE ;;
- ;; ;;
- ;; OUTPUT: NONE ;;
- ;; ;;
- ;; REGISTERS USED: AX,DX ;;
- ;; ;;
- ;;***************************************************************************;;
- DISPLAY COLD ;DISPLAY THE COLOR STRING
- JMP SHORT COL1 ;GO AROUND THE STRING
- COLD DB 1BH,'[' ;START OF STRING
- IFIDN <FOREGROUND>,<NORMAL> ;IF NORMAL REQUEST
- DB '0' ;NORMAL FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<BOLD> ;IF BOLD REQUEST
- DB '1' ;BOLD FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<UNDERSCORE> ;IF UNDERSCORED
- DB '4' ;UNDERSCORE FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<BLINK> ;IF BLINK REQUEST
- DB '5' ;BLINK FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<REVERSE> ;IF REVERSE REQUEST
- DB '7' ;REVERSE VIDEO
- ELSE
- IFIDN <FOREGROUND>,<INVISIBLE> ;IF INVISABLE REQUEST
- DB '8' ;INVISABLE (NO-SHOW)
- ELSE
- IFIDN <FOREGROUND>,<BLACK> ;IF BLACK REQUEST
- DB '30' ;BLACK FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<RED> ;IF RED REQUEST
- DB '31' ;RED FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<GREEN> ;IF GREEN REQUEST
- DB '32' ;GREEN FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<YELLOW> ;IF YELLOW REQUEST
- DB '33' ;YELLOW FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<BLUE> ;IF BLUE REQUEST
- DB '34' ;BLUE FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<MAGENTA> ;IF MAGENTA REQUEST
- DB '35' ;MAGENTA FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<CYAN> ;IF CYAN REQUEST
- DB '36' ;CYAN FOREGROUND
- ELSE
- IFIDN <FOREGROUND>,<WHITE> ;IF WHITE REQUEST
- DB '37' ;WHITE FOREGROUND
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- IFNB <FOREGROUND> ;IF WE HAVE FOREGROUND...
- IFNB <BACKGROUND> ;AND BACKGROUND COLORS
- DB ';' ;PUT IN A SEPERATOR
- ENDIF
- ENDIF
- IFIDN <BACKGROUND>,<BLACK> ;IF BLACK REQUEST
- DB '40' ;BLACK BACKGROUND
- ELSE
- IFIDN <BACKGROUND>,<RED> ;IF RED REQUEST
- DB '41' ;RED BACKGROUND
- ELSE
- IFIDN <BACKGROUND>,<GREEN> ;IF GREEN REQUEST
- DB '42' ;GREEN BACKGROUND
- ELSE
- IFIDN <BACKGROUND>,<YELLOW> ;IF YELLOW REQUEST
- DB '43' ;YELLOW BACKGROUND
- ELSE
- IFIDN <BACKGROUND>,<BLUE> ;IF BLUE REQUEST
- DB '44' ;BLUE BACKGROUND
- ELSE
- IFIDN <BACKGROUND>,<MAGENTA> ;IF MAGENTA REQUEST
- DB '45' ;MAGENTA BACKGROUND
- ELSE
- IFIDN <BACKGROUND>,<CYAN> ;IF CYAN REQUEST
- DB '46' ;CYAN BACKGROUND
- ELSE
- IFIDN <BACKGROUND>,<WHITE> ;IF WHITE REQUEST
- DB '47' ;WHITE BACKGROUND
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- ENDIF
- COL1 LABEL NEAR ;SKIP AROUND DATA
- ENDM
- CURSOR MACRO FUNCTION,AREA
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: CURSOR ;;
- ;; ;;
- ;; DESCRIPTION: SAVE OR SET CURRENT CURSOR TYPE, BLANK CURSOR ON SCREEN ;;
- ;; ;;
- ;; PARAMATERS: FUNCTION (SAVE,SET OR ERASE), DATA OR DATA ADDRESS ;;
- ;; ;;
- ;; INPUT: CURSOR START AND END LINES (SET ONLY) ;;
- ;; ;;
- ;; OUTPUT: CURSOR START AND END LINES (SAVE ONLY) ;;
- ;; ;;
- ;; REGISTERS USED: AX,CX (DS USED AND RESTORED) ;;
- ;; ;;
- ;;***************************************************************************;;
- IFIDN <FUNCTION>,<ERASE> ;IF CURSOR ERASE REQUESTED
- MOV AH,1 ;SET CURSOR MODE
- MOV CX,0F0FH ;START AND END ON LINE 15
- INT 10H ;GO DO A VIDEO INTERRUPT
- ELSE
- IFIDN <FUNCTION>,<SAVE> ;IF CURSOR SAVE REQUEST
- PUSH DS ;SAVE DS
- MOV AX,40H ;GET SEGMENT 40H IN AX
- MOV DS,AX ;AND PUT IT IN DS
- MOV CX,DS:60H ;GET CURRENT CURSOR MODE
- POP DS ;RESTORE DS
- MOV AREA,CX ;AND MOVE CURSOR MODE TO AREA
- ELSE
- IFIDN <FUNCTION>,<SET> ;IF CURSOR SET REQUEST
- MOV CX,AREA ;GET CURSOR MODE IN CX
- MOV AH,1 ;SET CURSOR MODE
- INT 10H ;GO DO VIDEO INTERRUPT
- ENDIF
- ENDIF
- ENDIF
- ENDM
- CVD MACRO DEST,ORG
- LOCAL CVBP,CVDE
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: CVD ;;
- ;; ;;
- ;; DESCRIPTION: CONVERT BINARY NUMBER TO ASCII DECIMAL NUMBER ;;
- ;; ;;
- ;; PARAMATERS: OUTPUT LABEL, INPUT LABEL ;;
- ;; ;;
- ;; INPUT: WORD BINARY NUMBER ;;
- ;; ;;
- ;; OUTPUT: 4 BYTE DECIMAL NUMBER ;;
- ;; ;;
- ;; REGISTERS USED: AX,BX,DX,DI ;;
- ;; ;;
- ;;***************************************************************************;;
- IFDIF <ORG>,<AX> ;IF BINARY VALUE NOT IN AX
- MOV AX,WORD PTR ORG ;MOVE ORIGIN TO AX
- ENDIF
- LEA DI,DEST ;GET ADDRESS OF DESTINATION
- MOV BL,100D ;DIVISOR TO BL
- DIV BL ;DIVIDE BY 100
- MOV BH,AH ;SAVE REMAINDER IN BH
- CALL CVDP ;CONVERT HIGHORDER TO DECIMAL
- MOV AL,BH ;GET REMAINDER
- CALL CVDP ;CONVERT LOW ORDER TO DECIMAL
- JMP SHORT CVDE ;JUMP AROUND PROC
- CVDP PROC NEAR
- AAM ;CONVERT TO PACKED DECIMAL
- OR AX,3030H ;CONVERT TO ASCII
- MOV [DI],AH ;STORE HIGH ORDER BYTE
- INC DI ;POINT TO NEXT BYTE
- MOV [DI],AL ;STORE LOW ORDER BYTE
- INC DI ;POINT TO NEXT BYTE
- RET ;RETURN TO CALLER
- CVDP ENDP
- CVDE LABEL NEAR
- ENDM
- DISPLAY MACRO STRING
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: DISPLAY ;;
- ;; ;;
- ;; DESCRIPTION: PRINT AN ASCII STRING ON THE SCREEN ;;
- ;; ;;
- ;; PARAMATERS: LABEL OF STRING TO BE PRINTED ;;
- ;; ;;
- ;; INPUT: ASCII STRING, ENDING WITH A $ ;;
- ;; ;;
- ;; OUTPUT: NONE ;;
- ;; ;;
- ;; REGISTERS USED: AX,DX ;;
- ;; ;;
- ;;***************************************************************************;;
- LEA DX,STRING ;ADDRESS OF STRING TO DISPLAY
- DOSCALL 9 ;DOS PRINT STRING FUNCTION
- ENDM
- DOSCALL MACRO FUNCTION
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: DOSCALL ;;
- ;; ;;
- ;; DESCRIPTION: SET UP AND EXECUTE REQUESTED DOS FUNCTION CALL ;;
- ;; ;;
- ;; PARAMATERS: FUNCTION TO BE CALLED ;;
- ;; ;;
- ;; INPUT: NONE ;;
- ;; ;;
- ;; OUTPUT: NONE ;;
- ;; ;;
- ;; REGISTERS USED: AX ;;
- ;; ;;
- ;;***************************************************************************;;
- MOV AH,FUNCTION ;GET FUNCTION IN AH
- INT 21H ;DOS CALL
- ENDM
- GETDATE MACRO DEST,TYPE
- LOCAL GDTE,GTDP
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: GETDATE ;;
- ;; ;;
- ;; DESCRIPTION: GETS CURRENT DATE INTO DESTINATION ;;
- ;; ;;
- ;; PARAMATERS: DESTINATION, TYPE OF DATE (CHAR OR BIN) ;;
- ;; ;;
- ;; INPUT: NONE ;;
- ;; ;;
- ;; OUTPUT: MM/DD/YY (CHAR) OR MDYY (BIN) ;;
- ;; ;;
- ;; REGISTERS USED: AX,BX,CX,DX,DI ;;
- ;; ;;
- ;;***************************************************************************;;
- IFIDN <TYPE>,<CHAR> ;IF CHARACTER REQUEST
- DOSCALL 2AH ;GET DATE FUNCTION CALL
- LEA DI,DEST ;GET ADDRESS OF DESTINATION
- MOV AL,DH ;GET MONTH IN AL
- CALL GDTP ;CONVERT BYTE TO ASCII
- MOV WORD PTR [DI],'/' ;MOVE IN /
- INC DI ;POINT TO NEXT BYTE
- MOV AL,DL ;GET DAY IN AL
- CALL GDTP ;CONVERT BYTE TO ASCII
- MOV WORD PTR [DI],'/' ;MOVE IN /
- INC DI ;POINT TO NEXT BYTE
- MOV AX,CX ;GET YEAR IN AL
- MOV BL,100D ;MOVE IN DIVISOR
- DIV BL ;DIVIDE BY 100
- MOV AL,AH ;REMAINDER TO AL
- CALL GDTP ;CONVERT BYTE TO ASCII
- JMP SHORT GDTE ;JUMP AROUND PROC
- GDTP PROC NEAR
- AAM ;CONVERT TO PACKED DECIMAL
- ADD AX,3030H ;CONVERT TO ASCII
- MOV BYTE PTR [DI],AH ;STORE HIGH ORDER BYTE
- INC DI ;POINT TO NEXT BYTE
- MOV BYTE PTR [DI],AL ;STORE LOW ORDER BYTE
- INC DI ;POINT TO NEXT BYTE
- RET ;RETURN TO CALLER
- GDTP ENDP
- GDTE LABEL NEAR
- ELSE
- IFIDN <TYPE>,<BIN> ;IF BINARY REQUEST
- DOSCALL 2AH ;GET CURRENT DATE
- MOV BYTE PTR DEST,DH ;MOVE MONTH TO DESTINATION
- MOV BYTE PTR [DEST+1],DL ;MOVE DAT TO DESTINATION
- MOV WORD PTR [DEST+2],CX ;MOVE YEAR TO DESTINATION
- ENDIF
- ENDIF
- ENDM
- GETTIME MACRO DEST,TYPE
- LOCAL GTMP,GTME
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: GETTIME ;;
- ;; ;;
- ;; DESCRIPTION: GET CURRENT TIME INTO DESTINATION ;;
- ;; ;;
- ;; PARAMATERS: DESTINATION, TYPE (CHAR OR BIN) ;;
- ;; ;;
- ;; INPUT: NONE ;;
- ;; ;;
- ;; OUTPUT: HH:MM:SS:HH (CHAR) OR HMSH (BIN) ;;
- ;; ;;
- ;; REGISTERS USED: AX,BX,CX,DX,DI ;;
- ;; ;;
- ;;***************************************************************************;;
- IFIDN <TYPE>,<CHAR> ;IF CHARACTER REQUEST
- DOSCALL 2CH ;GET CURRENT TIME
- LEA DI,DEST ;GET DESTINATION ADDRESS
- MOV AL,CH ;MOVE HOURS TO AL
- CALL GTMP ;AND CONVERT TO ASCII
- MOV WORD PTR [DI],':' ;PUT IN :
- INC DI ;POINT TO NEXT BYTE
- MOV AL,CL ;MOVE MINUTES TO AL
- CALL GTMP ;AND CONVERT TO ASCII
- MOV WORD PTR [DI],':' ;PUT IN :
- INC DI ;POINT TO NEXT BYTE
- MOV AL,DH ;MOVE SECONDS TO AL
- CALL GTMP ;AND CONVERT TO ASCII
- MOV WORD PTR [DI],':' ;PUT IN :
- INC DI ;POINT TO NEXT BYTE
- MOV AL,DL ;MOVE HUNDRETHS TO AL
- CALL GTMP ;AND CONVERT TO ASCII
- JMP SHORT GTME ;JUMP AROUND PROC
- GTMP PROC NEAR
- AAM ;CONVERT TO PACKED DECIMAL
- ADD AX,3030H ;CONVERT TO ASCII
- MOV BYTE PTR [DI],AH ;STORE HIGH ORDER BYTE
- INC DI ;POINT TO NEXT BYTE
- MOV BYTE PTR [DI],AL ;STORE LOW ORDER BYTE
- INC DI ;POINT TO NEXT BYTE
- RET ;RETURN TO CALLER
- GTMP ENDP
- GTME LABEL NEAR
- ELSE
- IFIDN <TYPE>,<BIN> ;IF REQUEST FOR BINARY TIME
- DOSCALL 2CH ;GET CURRENT TIME
- MOV BYTE PTR DEST,CH ;MOVE HOURS TO DESTINATION
- MOV BYTE PTR DEST+1,CL ;MOVE MINUTES TO DESTINATION
- MOV BYTE PTR DEST+2,DH ;MOVE SECONDS TO DESTINATION
- MOV BYTE PTR DEST+3,DL ;MOVE HUNDRETHS TO DESTINATION
- ENDIF
- ENDIF
- ENDM
- LOCATE MACRO ROW,COLUMN
- LOCAL LOC1,LOCD
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: LOCATE ;;
- ;; ;;
- ;; DESCRIPTION: POSITION CURSOR ON SCREEN ;;
- ;; ;;
- ;; PARAMATERS: ROW, COLUMN ;;
- ;; ;;
- ;; INPUT: BINARY ROW AND COLUMN LOCATION, IF NOT IN MACRO CALL ;;
- ;; ;;
- ;; OUTPUT: NONE ;;
- ;; ;;
- ;; REGISTERS USED: AX,DX ;;
- ;; ;;
- ;;***************************************************************************;;
- MOV AL,ROW ;GET BINARY ROW
- AAM ;CONVERT TO PACKED DECIMAL
- ADD AX,3030H ;CONVERT TO ASCII
- MOV BYTE PTR [LOCD+2],AH ;HIGH ORDER ROW TO STRING
- MOV BYTE PTR [LOCD+3],AL ;LOW ORDER ROW TO STRING
- CLEAR AH ;CLEAR AH AGAIN
- MOV AL,COLUMN ;GET COLUMN IN AL
- AAM ;CONVERT TO PACKED DECIMAL
- ADD AX,3030H ;CONVERT TO ASCII
- MOV BYTE PTR [LOCD+5],AH ;HIGH ORDER COLUMN TO STRING
- MOV BYTE PTR [LOCD+6],AL ;LOW ORDER COLUMN TI STRING
- DISPLAY LOCD ;POSITION THE CURSOR
- JMP SHORT LOC1 ;JUMP AROUND STRING
- LOCD DB 1BH,'[ ; H$' ;POSITION CURSOR STRING
- LOC1 LABEL NEAR
- ENDM
- MOVE MACRO TO,FROM,LNGTH
- LOCAL MOVELP
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: MOVE ;;
- ;; ;;
- ;; DESCRIPTION: MULTIPLE BYTE MOVE ;;
- ;; ;;
- ;; PARAMATERS: TO LOCATION, FROM LOCATION, LENGTH (OPT.) ;;
- ;; ;;
- ;; INPUT: SOURCE STRING ;;
- ;; ;;
- ;; OUTPUT: DESTINATION STRING ;;
- ;; ;;
- ;; REGISTERS USED: CX,SI,DI (ES ASSUMED POINTING TO DESTINATION SEGMENT) ;;
- ;; ;;
- ;;***************************************************************************;;
- CLEAR CH ;CLEAR LENGTH REG
- IFB <LENGTH> ;IF NO LENGTH REQUESTED
- MOV CX,LENGTH TO ;USE LENGTH OF TO STRING
- ELSE ;IF LENGTH REQUESTED
- MOV CX,LNGTH ;USE LENGTH IN MACRO
- ENDIF
- IFDIF <TO>,<DI> ;IF DI NOT SPECIFIED FOR TO
- LEA DI,TO ;LOAD TO ADDRESS INTO DI
- ENDIF
- IFDIF <FROM>,<SI> ;IF SI NOT SPECIFIED FOR FROM
- LEA SI,FROM ;LOAD FROM ADDRESS INTO SI
- ENDIF
- CLD ;CLEAR DIRECTION FLAG
- REP MOVSB ;MOVE THE DATA
- ENDM
- RESTORE MACRO R1,R2,R3,R4,R5,R6,R7,R8,R9,R10
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: RESTORE ;;
- ;; ;;
- ;; DESCRIPTION: RESTORE REGISTERS FROM STACK ;;
- ;; ;;
- ;; PARAMATERS: REGISTERS TO BE RESTORED (IN REVERSE ORDER) ;;
- ;; ;;
- ;; INPUT: NONE ;;
- ;; ;;
- ;; OUTPUT: RESTORED REGISTERS ;;
- ;; ;;
- ;; REGISTERS USED: NONE ;;
- ;; ;;
- ;;***************************************************************************;;
- IRP RX,<R10,R9,R8,R7,R6,R5,R4,R3,R2,R1> ;REPEAT FOR EACH PARM
- IFNB <RX> ;IF THIS PARM NOT BLANK
- POP RX ;POP THE REGISTER
- ENDIF ;END IFNB
- ENDM ;END IRP
- ENDM
- SAVE MACRO R1,R2,R3,R4,R5,R6,R7,R8,R9,R10
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: SAVE ;;
- ;; ;;
- ;; DESCRIPTION: SAVE REGISTERS ON THE STACK ;;
- ;; ;;
- ;; PARAMATERS: REGISTERS TO BE SAVED ;;
- ;; ;;
- ;; INPUT: NONE ;;
- ;; ;;
- ;; OUTPUT: REGISTERS SAVED ON STACK ;;
- ;; ;;
- ;; REGISTERS USED: NONE ;;
- ;; ;;
- ;;***************************************************************************;;
- IRP RX,<R1,R2,R3,R4,R5,R6,R7,R8,R9,R10> ;REPEAT FOR EACH PARM
- IFNB <RX> ;IF THIS PARM NOT BLANK
- PUSH RX ;SAVE THE REGISTER
- ENDIF ;END IFNB
- ENDM ;END IRP
- ENDM
- SETINT MACRO INTERRUPT,ROUTINE
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: SETINT ;;
- ;; ;;
- ;; DESCRIPTION: SET INTERRUPT VECTOR ;;
- ;; ;;
- ;; PARAMATERS: INTERRUPT VECTOR, INTERRUPT ROUTINE ADDRESS ;;
- ;; ;;
- ;; INPUT: NONE ;;
- ;; ;;
- ;; OUTPUT: NONE ;;
- ;; ;;
- ;; REGISTERS USED: AX,DX ;;
- ;; ;;
- ;;***************************************************************************;;
- MOV AL,INTERRUPT ;GET INTERRUPT TO BE SET
- LEA DX,ROUTINE ;GET ADDRESS OF ROUTINE
- DOSCALL 25H ;CALL DOS
- ENDM
- SETTIME MACRO HOURS,MINUTES,SECONDS,HUNDRETHS
- ;;***************************************************************************;;
- ;; ;;
- ;; MACRO: SETTIME ;;
- ;; ;;
- ;; DESCRIPTION: SET CURRENT TIME ;;
- ;; ;;
- ;; PARAMATERS: HOURS, MINUTES, SECONDS,HUNDRETHS ;;
- ;; ;;
- ;; INPUT: TIME TO BE SET ;;
- ;; ;;
- ;; OUTPUT: NONE ;;
- ;; ;;
- ;; REGISTERS USED: AX,CX,DX ;;
- ;; ;;
- ;;***************************************************************************;;
- IFNB <HOURS> ;IF HOURS SPECIFIED
- MOV CH,HOURS ;MOVE HOURS TO CH
- ELSE ;IF HOURS NOT SPECIFIED
- CLEAR CH ;CLEAR CH
- ENDIF
- IFNB <MINUTES> ;IF MINUTES SPECIFIED
- MOV CL,MINUTES ;MOVE MINUTES TO CL
- ELSE ;IF MINUTES NOT SPECIFIED
- CLEAR CL ;CLEAR CL
- ENDIF
- IFNB <SECONDS> ;IF SECONDS SPECIFIED
- MOV DH,SECONDS ;MOVE SECONDS TO DH
- ELSE ;IF SECONDS NOT SPECIFIED
- CLEAR DH ;CLEAR DH
- ENDIF
- IFNB <HUNDRETHS> ;IF HUNDRETHS SPECIFIED
- MOV DL,HUNDRETHS ;MOVE HUNDRETHS TO DL
- ELSE ;IF HNDRETHS NOT SPECIFIED
- CLEAR DL ;CLEAR DL
- ENDIF
- DOSCALL 2DH ;CALL DOS TO SET TIME
- ENDM
-